FROM flink:1.20-java11

LABEL maintainer="Browse ETL Team"
LABEL description="Flink Agents - User Behavior Analysis Processor"

# 安装 Python 3.11 和编译依赖（不改变 WORKDIR，保持 Flink 默认环境）
RUN apt-get update && apt-get install -y \
    python3.11 \
    python3-pip \
    python3.11-dev \
    gcc \
    g++ \
    zip \
    && rm -rf /var/lib/apt/lists/*

# 设置 Python 默认版本
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1 && \
    update-alternatives --install /usr/bin/python python /usr/bin/python3.11 1

# 确保 Java 环境变量被正确设置（显式声明，避免被 WORKDIR 影响）
ENV JAVA_HOME=/opt/java/openjdk
ENV PATH=/opt/flink/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 设置工作目录（放在 Python 安装之后）
WORKDIR /app

# 复制 requirements 文件
COPY requirements.txt .

# 先安装 numpy（避免编译问题）
# 使用 BuildKit Cache Mount 持久化 pip 缓存到宿主机
RUN --mount=type=cache,target=/root/.cache/pip \
    pip3 install numpy==1.24.4

# 安装 Python 依赖
RUN --mount=type=cache,target=/root/.cache/pip \
    pip3 install -r requirements.txt

# 添加 Kinesis Connector JAR 到 Flink lib 目录
COPY flink-sql-connector-aws-kinesis-streams-5.0.0-1.20.jar /opt/flink/lib/

# 复制应用代码和模板
COPY agents/ ./agents/
COPY handlers/ ./handlers/
COPY behavior_agent.py run_local.py run_cluster.py prompt_template.txt prompt_template_v2.txt ./

# 添加执行权限
RUN chmod +x behavior_agent.py run_local.py run_cluster.py

# 为 Flink 集群模式创建 Python 模块 zip 文件
# 打包 agents/ 和 handlers/ 目录，供 --pyArchives 使用
RUN cd /app && zip -r /app/python_modules.zip agents handlers prompt_template.txt prompt_template_v2.txt

# 启动命令（保持向后兼容，默认使用 behavior_agent.py）
# docker-compose 会通过 command 参数覆盖
CMD ["python3", "-u", "behavior_agent.py"]

